// 7.6. 存储类-thread_local存储类
/**
 * 存储类定义 C++ 程序中变量/函数的范围（可见性）和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类：
auto
register
static
extern
mutable
thread_local (C++11)

从 C++ 17 开始，auto 关键字不再是 C++ 存储类说明符，且 register 关键字被弃用。


翻译
register 登记簿;登记表;注册簿;声区;音区;(适合特定场合使用的)语体风格，语域
static 静止的;静态的;停滞的;静力的
extern 不住机构内的公共机构工作人员;(尤指)非住院医生，非住院的医院员工
mutable 可变的;会变的;易变的
thread_local 本地线程


thread_local 存储类
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建，并在销毁线程时销毁。 每个线程都有其自己的变量副本。

thread_local 说明符可以与 static 或 extern 合并。

可以将 thread_local 仅应用于数据声明和定义，thread_local 不能用于函数声明或定义。

以下演示了可以被声明为 thread_local 的变量：
 * 
*/

#include <iostream>

thread_local int x; // 命名空间下的全局变量

class X
{
  static thread_local std::string s; // 类的static成员变量
};

static thread_local std::string X::s; // X::s 是需要定义的

void foo()
{
  thread_local std::vector<int> v; // 本地变量
}

int main(void)
{

  printf("-------------end----------\n");
  return 0;
}